MapStruct হল একটি শক্তিশালী Java লাইব্রেরি যা ডোমেইন অবজেক্ট (POJO) এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে সহজভাবে ম্যাপিং করতে সহায়তা করে। কখনও কখনও, আমাদের কাস্টম লজিক প্রয়োগ করতে হয় যখন ডেটা কনভার্সন সাধারণ ম্যাপিং নিয়ম দ্বারা সম্ভব হয় না। এর জন্য MapStruct Expression এবং Method Reference ফিচার প্রদান করে, যা বিশেষ ধরনের কাস্টম ম্যাপিং লজিক প্রয়োগ করতে সাহায্য করে।
এই টিউটোরিয়ালে, আমরা Expression এবং Method Reference এর ধারণা এবং এগুলির মাধ্যমে কিভাবে ম্যাপিং কার্যক্রম করা যায় তা দেখব।
১. Expression Mapping
Expression Mapping ব্যবহার করে আপনি MapStruct এর মধ্যে কাস্টম লজিক প্রয়োগ করতে পারেন। এতে আপনি Java Expression ব্যবহার করে সরাসরি একটি কাস্টম কনভার্সন লজিক প্রদান করতে পারেন।
Expression Mapping এর ধারণা
Expression Mapping হল সেই ক্ষেত্র যেখানে আপনি MapStruct এর @Mapping অ্যানোটেশনের মাধ্যমে Java Expressions ব্যবহার করে ফিল্ডের মান কনভার্ট করেন। এটি খুবই শক্তিশালী এবং কার্যকরী, বিশেষ করে যখন আপনি কাস্টম ট্রান্সফর্মেশন বা কনভার্সন প্রয়োগ করতে চান।
Expression Mapping Example:
ধরা যাক, আমাদের একটি Person ক্লাস এবং একটি PersonDTO ক্লাস রয়েছে। আমরা PersonDTO এর fullName ফিল্ডে Person এর firstName এবং lastName ফিল্ডের মান যোগ করতে চাই।
Person.java:
public class Person {
private String firstName;
private String lastName;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String fullName;
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface):
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
public interface PersonMapper {
@Mapping(target = "fullName", expression = "java(person.getFirstName() + \" \" + person.getLastName())")
PersonDTO personToPersonDTO(Person person);
}
এখানে, expression প্রপার্টি ব্যবহার করে আমরা firstName এবং lastName যোগ করে fullName তৈরি করেছি। java() ব্লকের মধ্যে কাস্টম Java Expression দেওয়া হয়েছে।
২. Method Reference Mapping
Method Reference Mapping এর মাধ্যমে আপনি MapStruct এর @Mapping অ্যানোটেশন ব্যবহার করে একটি মেথডের মাধ্যমে কাস্টম ম্যাপিং লজিক প্রয়োগ করতে পারেন। যখন আপনি কোনো কাস্টম কনভার্সন মেথড তৈরি করতে চান, তখন এই ফিচারটি ব্যবহার করা হয়।
Method Reference Mapping এর ধারণা
Method Reference হল একটি পদ্ধতি যেখানে আপনি ম্যাপিং করার জন্য একটি বিদ্যমান মেথডকে রেফারেন্স হিসেবে ব্যবহার করেন। এটি MapStruct কে নির্দেশ করে যে একটি নির্দিষ্ট মেথড ব্যবহার করে কাস্টম ম্যাপিং সম্পন্ন করতে হবে।
Method Reference Mapping Example:
ধরা যাক, Person ক্লাস থেকে PersonDTO ক্লাসে কিছু কাস্টম লজিক প্রয়োগ করতে হবে এবং এটি একটি আলাদা মেথড দিয়ে সম্পন্ন করতে হবে।
Person.java:
public class Person {
private String firstName;
private String lastName;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String fullName;
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface):
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
public interface PersonMapper {
@Mapping(target = "fullName", source = "person", qualifiedByName = "combineNames")
PersonDTO personToPersonDTO(Person person);
// Custom Method to combine firstName and lastName
default String combineNames(Person person) {
return person.getFirstName() + " " + person.getLastName();
}
}
এখানে, combineNames() মেথডটি qualifiedByName এর মাধ্যমে রেফারেন্স করা হয়েছে এবং Person অবজেক্টের firstName এবং lastName একসাথে যোগ করে fullName তৈরি করা হচ্ছে।
৩. Expression এবং Method Reference এর মধ্যে পার্থক্য
| Feature | Expression Mapping | Method Reference Mapping |
|---|---|---|
| Definition | Java expressions used directly inside @Mapping | References to custom methods for mapping |
| Use Case | Simple and small custom mappings | Complex or reusable mappings |
| Performance | Direct expression evaluation at compile-time | Method call, slightly more overhead than expression |
| Flexibility | Less flexible for complex logic | More flexible for complex logic and reusability |
৪. MapStruct এ Expression এবং Method Reference এর ব্যবহার
- Expression Mapping সহজ এবং ছোট ট্রান্সফর্মেশন করতে ব্যবহৃত হয়। এটি তখন ব্যবহার করা হয় যখন আপনি দ্রুত একটি কাস্টম কনভার্সন ফাংশন বা লজিক প্রয়োগ করতে চান।
- Method Reference Mapping ব্যবহৃত হয় যখন কাস্টম ম্যাপিং লজিক জটিল বা পুনরাবৃত্তি হয়ে থাকে এবং আপনি সেই লজিক আলাদা মেথডে রাখতে চান। এটি কোড পুনঃব্যবহারের জন্য উপযোগী।
Combine Example:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
public interface PersonMapper {
// Expression Example
@Mapping(target = "fullName", expression = "java(person.getFirstName() + \" \" + person.getLastName())")
PersonDTO personToPersonDTO(Person person);
// Method Reference Example
@Mapping(target = "fullName", source = "person", qualifiedByName = "combineNames")
PersonDTO personToPersonDTOUsingMethod(Person person);
default String combineNames(Person person) {
return person.getFirstName() + " " + person.getLastName();
}
}
এখানে আমরা দুটি পদ্ধতি দেখিয়েছি: একটি Expression Mapping এবং আরেকটি Method Reference Mapping ব্যবহার করে।
সারাংশ
MapStruct এর মাধ্যমে Expression Mapping এবং Method Reference Mapping এর ব্যবহার কাস্টম ম্যাপিং লজিক প্রয়োগ করার জন্য খুবই উপকারী। Expression Mapping সহজ এবং ছোট কাস্টম কনভার্সন প্রয়োগের জন্য উপযুক্ত, যখন Method Reference Mapping জটিল বা পুনরাবৃত্তি কাস্টম লজিক প্রয়োগের জন্য ব্যবহৃত হয়। MapStruct এর এই ফিচার দুটি আপনাকে আরও শক্তিশালী এবং নমনীয় ম্যাপিং অপারেশন তৈরি করতে সহায়তা করে।
Read more